#ifndef __RADAR_H__
#define __RADAR_H__


#define ARS40X_ID  0x01
#define ERADAR_ID  0x02


#define RADAR_ALARM_SAVE   0
#define RADAR_ALARM_DANGER 1
#define RADAR_ALARM_SOFT   2


typedef struct
{
	int  obj_id;  /* 障碍物ID, 0~255. 跟踪障碍物时, ID保持不变 */
	int  obj_class;  /* 障碍物类型
	                    -1: 无类型
	                   0x0: point
	                   0x1: car
	                   0x2: truck
	                   0x3: pedestrian
	                   0x4: motorcycle
	                   0x5: bicycle
	                   0x6: wide
	                   0x7: reserved */
                      
	float  obj_width;   /* 障碍物宽度. 单位: m, 范围: 0 ~ 100m */
	float  obj_rcs;     /* 雷达散射截面, 表征了目标在雷达波照射下所产生回波强度的一种物理量,
                           单位: dbm2, 范围: -64dbm2 ~ 64dbm2    */
	float  obj_x;       /* 横坐标, 右边为正轴. 单位: m, 范围: -200m ~ 200m */
	float  obj_y;       /* 纵坐标, 单位: m/bit, 范围: 0 ~ 1200m */
	float  obj_angle;   /* 方向角, 单位: deg,  范围: -180deg ~ 180deg */
	float  obj_x_vrel;  /* x轴相对速度分量. 单位: kmph,  范围: -250km/h ~ 250km/h */
	float  obj_y_vrel;  /* y轴相对速度分量. 单位: kmph,  范围: -500km/h ~ 500km/h */
	float  obj_x_arel;  /* x轴相对加速度分量. 单位: m/s2,  范围: -20m/s2 ~ 20m/s2 */
	float  obj_y_arel;  /* y轴相对加速度分量. 单位: m/s2,  范围: -10m/s2 ~ 10m/s2 */
}object_t;
 
typedef struct TagAlarmInfo
{
	int   car_id;     /*前面没有车辆时为-1*/
	int   warn_flag;  /*RADAR_ALARM_SAVE 0 RADAR_ALARM_DANGER 1*/
	float ttc;
	float dist_x;
	float dist_y;
	float speed_x;
	float speed_y;
	float rcs;
}TAlarmInfo;


#define RADAR_FLG_883     0x0001  /* 883测试版本 */
#define RADAR_FLG_SERIAL  0x0002  /* 使用串口转换盒接收雷达数据 */

/* 用于主线程向雷达处理线程传递参数 */
typedef struct {
	unsigned int radar_id;
	float left_edge;
	float right_edge;
	float radar_alarm_delay;  /* 雷达报警延时时间, 单位: s, 一般为正数 */
	unsigned int cfg_flag;    /* 配置字 */
	int  (*obj_process)(int obj_num, object_t *obj);
	int  (*radar_alarm)(TAlarmInfo *ptAlarm);
	int  (*radar_record)(unsigned char *dat, unsigned int bytes);
}radar_param_t;

void   start_radar(radar_param_t *param);

#endif
